<?php

if( !defined('AROOT') ) die('NO AROOT!');//defined()检查某常量是否存在
if( !defined('DS') ) define( 'DS' , DIRECTORY_SEPARATOR );

// define constant
define( 'IN' , true );

define( 'ROOT' , dirname( __FILE__ ) . DS );
define( 'CROOT' , ROOT . 'core' . DS  );

// define 
////显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_NOTICE);//设置 PHP 的报错级别并返回当前级别。E_ALL - 所有的错误和警告 E_NOTICE - 运行时提醒
ini_set( 'display_errors' , true );//为一个配置选项设置值 display_errors是否将错误信息作为输出的一部分显示到屏幕

include_once( CROOT . 'lib' . DS . 'core.function.php' );//载入框架核心函数文件
@include_once( AROOT . 'lib' . DS . 'app.function.php' );//载入站点自定义函数文件 @是如果有错误的话不提示错误，保证页面还能继续运行

include_once( CROOT . 'config' .  DS . 'core.config.php' );//框架当前配置文件
include_once( AROOT . 'config' . DS . 'app.config.php' );//站点自定义配置文件

/*
unction c( $str ) // 读取配置文件中$str为key的对应的value
function v( $str ) // 取得 $_REQUEST[$str] 的数据，不存在不会报warning
function z( $str ) // strip_tags 剥去 HTML、XML 以及 PHP 的标签
function g( $str ) // 取得 $GLOBALS[$str] 的数据
function t( $str ) // trim
function u( $str ) // urlencode
*/

$c = $GLOBALS['c'] = v('c') ? v('c') : c('default_controller');
$a = $GLOBALS['a'] = v('a') ? v('a') : c('default_action');

$c = basename(strtolower( z($c) ));/*strtolower() 函数把字符串转换为小写。*/
$a =  basename(strtolower( z($a) ));/*basename() 函数返回路径中的文件名部分。*/

$post_fix = '.class.php';

$cont_file = AROOT . 'controller'  . DS . $c . $post_fix;
$class_name = $c .'Controller' ; 
if( !file_exists( $cont_file ) )
{
	$cont_file = CROOT . 'controller' . DS . $c . $post_fix;
	if( !file_exists( $cont_file ) ) die('Can\'t find controller file - ' . $c . $post_fix );
} 


require_once( $cont_file );
if( !class_exists( $class_name ) ) die('Can\'t find class - '   .  $class_name );/*class_exists()判断类是否存在*/


$o = new $class_name;
if( !method_exists( $o , $a ) ) die('Can\'t find method - '   . $a . ' ');/*class_exists()判断类的方法是否存在*/

/**/
/*strpos()函数返回字符串在另一个字符串中第一次出现的位置*/
/*Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型的*/
/*ini_get()获取配置文件的选项值*/
/*zlib.output_compression在php.ini中配置是否开启gzip压缩方法*/
/*ob_start()打开输出控制缓冲*/
/*ob_gzhandler — 在ob_start中使用的用来压缩输出缓冲区中内容的回调函数*/
if(strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE && @ini_get("zlib.output_compression")) ob_start("ob_gzhandler");
call_user_func( array( $o , $a ) );/*返回自定义用户函数给的第一参数*/


